///////////////////////////////////////////////////////////////////////////////
///
/// Cylan Client Core
/// Copyright (C) Shenzhen Cylan Tech. Co., Ltd. 2012
///
/// @file       ICABResource.h
/// @brief      ICAB资源相关API
///
///////////////////////////////////////////////////////////////////////////////
#ifndef ICAB_RESOURCE_H
#define ICAB_RESOURCE_H

#ifdef __cplusplus
extern "C"{
#endif

#include "Core/Core.h"

/**
 * @struct ICAB_RESOURCE
 * @brief ICAB资源信息
 */
/*
typedef struct ICAB_RESOURCE
{
    int ID;                         ///< ICAB资源ID
    char Name[CC_NAME_LEN];         ///< ICAB资源名称
    char Desc[CC_NAME_LEN];         ///< ICAB资源描述
    char Icon[CC_NAME_LEN];         ///< ICAB图标地址
    char Sso_username[CC_NAME_LEN]; ///< 单点登录用户名
    char Sso_password[CC_NAME_LEN]; ///< 单点登录密码
    char Group[CC_NAME_LEN];        ///< ICAB资源所属组
    int  IconCreateTime;            ///< 图标创建时间    
    int SsoID;                      ///< 单点登陆配置模板ID
    int SsoExist;                   ///< 当前用户单点登陆配置已经存在
    int Weight;                     ///< ICAB资源排序
    int Width;                      ///< ICAB显示宽度
    int Height;                     ///< ICAB显示高度
    int ColorDepth;                 ///< ICAB显示颜色深度
    int ForceSettings;              ///< ICAB显示强制使用服务器配置
    int Verticaldisplayflag;        ///< ICAB横屏竖屏显示模式
} ICAB_RESOURCE;
*/
typedef struct ICAB_RESOURCE
{
	int ID;                         ///< ICAB资源ID
	const char *Name;         ///< ICAB资源名称
	const char *Desc;        ///< ICAB资源描述
	const char *startExe;         ///< ICAB图标地址
	const char *userName; ///< 单点登录用户名
	const char *passWord; ///< 单点登录密码
	const char *driverMap;        ///< ICAB资源所属组
	const char *wkDir;
	const char *szCabIPAddr;	///<ICAB资源 加入规则中的ip地址
	const char *szTunnelLev;	///<ICAB资源 判断使用IP隧道或TCP隧道
	const char *szLbName;
	int iRdpPort;                      ///< rdp端口
	int iSharedrivers;                     ///< ICAB资源排序
	int iShareprinters;              ///< ICAB显示强制使用服务器配置
	int iSharecomPort;
	int Width;                      ///< ICAB显示宽度
	int Height;                     ///< ICAB显示高度
	int ColorDepth;                 ///< ICAB显示颜色深度
	int iAutoLogin;
	int iKeyboardhook;
	int iFullScreen;
} ICAB_RESOURCE;




/**
 * @fn int ICABResourceCount(const CHANDLE Session)
 * @brief 返回会话可用的ICAB资源个数
 * @param Session 已登陆的Session句柄
 * @return 可用的ICAB资源数量
 */
int ICABResourceCount(const CHANDLE Session);


/**
 * @fn CC_STATUS ICABResourceInfo(const CHANDLE Session, int Index, ICAB_RESOURCE *Resource, int *Size)
 * @brief 获取ICAB资源信息
 * @param Session 已登陆的Session句柄
 * @param Index 资源索引
 * @param Resource 调用者提供的缓冲区以保存资源信息
 * @param Size Resource参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @return ICAB资源信息
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 资源索引超出可用资源个数范围
 * @retval ERR_BUFFER_TOO_SMALL 提供的Resource缓冲区太小
 */
CC_STATUS ICABSResourceInfo(const CHANDLE Session, int Index, ICAB_RESOURCE *Resource, int *Size);

/**
 * @fn CC_STATUS ICABGetSsoSettingUrl(const CHANDLE Session, char *pSsoSettingUrl, int *Size)
 * @brief 获取ICAB资源的SSO配置地址
 * @param Session 已登陆的Session句柄
 * @param SsoID 单点登陆模版ID 
 * @param pSsoSettingUrl 调用者提供的缓冲区以保存url地址
 * @param Size pSsoSettingUrl参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 没有找到SSO配置地址
 * @retval ERR_BUFFER_TOO_SMALL 提供的pSsoSettingUrl缓冲区太小
 */
CC_STATUS ICABGetSsoSettingUrl(const CHANDLE Session, int SsoID, char *pSsoSettingUrl, int *Size);

/**
 * @fn CC_STATUS ICABGetHttpsBaseUrl(const CHANDLE Session, char *pHttpBaseUrl, int *Size)
 * @brief 获取SGA路径
 * @param Session 已登陆的Session句柄
 * @param SsoID 单点登陆模版ID 
 * @param pSsoSettingUrl 调用者提供的缓冲区以保存url地址
 * @param Size pSsoSettingUrl参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 没有找到SSO配置地址
 * @retval ERR_BUFFER_TOO_SMALL 提供的pSsoSettingUrl缓冲区太小
 */

CC_STATUS ICABSLBInfo(const CHANDLE Session, int Index, ICAB_RESOURCE *Resource, int *Size);

CC_STATUS ICABSHostInfo(const CHANDLE Session, int Index, ICAB_RESOURCE *Resource, int *Size);


// CC_STATUS ICABGetHttpsBaseUrl(const CHANDLE Session, int SsoID, char *pHttpBaseUrl, int *Size);
// 
// CC_STATUS ICABGetKeyInfo(void *obj, const char *szKey, char **szOutBuffer);

#ifdef __cplusplus
}
#endif

#endif /* ICAB_RESOURCE_H */